package cn.tedu.block;

public class TestBlock {
    public static void main(String[] args) {
        /*1在创建对象之前，会先自动执行静态代码块，而且静态代码块只执行一次
        2.在每一次创建对象时，都会调用构造代码块和构造方法，构造代码块先执行
         */
       Person p= new Person();
       p.sleep();




    }
}
//1.抽象封装一个Person类
 class  Person{
    //2创建静态代码
    /*静态代码块：
    位置：类里方法外
    触发时机：静态代码块也是静态资源，随着类的加载而加载，优先于对象加载,
    并且只加载一次
    作用：用于加载一些需要第一时间加载，并且只加载一次的资源
     */

    static{
        System.out.println("我是静态代码块");
    }
    /*创建构造代码块:
    位置：类里方法外
    触发时机：创建对象时触发，而且要由构造方法执行?
    作用：用于提取所有构造方法的共性功能
     */
    {
        System.out.println("我是构造代码块");
    }
    //4.创建构造方法
    /*构造方法时于类同名且没有返回值类型的方法，用于创建对象*/

    public Person(){
        this(9);
        System.out.println("我是构造方法~");
        int sum= 8;
        System.out.println(sum);
    }

    public Person(int a){
        System.out.println(this.sum);
        System.out.println("我是构造方法2~");
        System.out.println(a);
    }

    int sum= 8989;
    public void sleep(){
        int sum=9898;
        System.out.println("我是普通方法");
        System.out.println(this.sum);

        //6.创建局部代码块
    /*局部代码块
    位置：方法里
    执行时机：调用方法时触发
     */
        {
            System.out.println("我是局部代码块");
        }
    }


}